class Tool(object):
    count = 0  # 类属性，这里类似于类的全局变量,用于记录实例化对象个数

    def __init__(self, name):
        self.name = name
        Tool.count += 1

    def __del__(self):
        Tool.count -= 1

    """
    @classmethod
    类方法需要用 修饰器@classmethod 来标识，告诉解释器这是一个类方法
    (1)类方法的 第一个参数 应该是cls
            由 哪一个类 调用的方法，方法内的cls就是哪一个类的引用
            这个参数cls和 实例方法 的第一个参数是self类似
            注：cls使用其他名称也可以，只不过习惯于使用cls
    (2)通过 类名.调用类方法 时，不需要传递cls参数
    (3)在方法内部
            可以通过 cls.访问类的属性 
            可以通过 cls.调用其他类方法
    """
    @classmethod
    def show_tool_count(cls):
        """
        当你不使用对象属性，只使用类属性，类方法
        """
        print(cls.count)

    """
    @staticmethod
    用途：打印一些帮助
    静态方法 需要用 修饰器@staticmethod 来标识，告诉解释器这是一个静态方法
    通过 类名.调用静态方法 ， 虽然通过对象.静态方法 来执行，但不规范
    """
    @staticmethod
    def help():
        """
        不使用对象属性，也不使用类属性
        """
        print('这是一个工具类，作用是实例化各种工具对象')


if __name__ == '__main__':
    tool1 = Tool('斧子')
    print(Tool.count)  # 不规范
    tool1.show_tool_count()
    tool2 = Tool('锤子')
    tool2.show_tool_count()
    del tool1
    tool2.show_tool_count()
    # Tool.name='工具类',不要在类外，给类增加类属性
    # print(Tool.name)
    tool2.help()
    Tool.help()